package cn.tedu.reflect;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Test5 {
    public static void main(String[] args) throws Exception{
        // 使用反射设置属性值
String className = "cn.tedu.reflect.User";
String propertyName ="age";

// 加载指定的类
Class<?> clazz = Class.forName(className);
// 构建设置属性值的方法名
String setMethodName = "set" + propertyName.toUpperCase().charAt(0) + propertyName.substring(1);
// 根据属性名获取属性类型
Field field = clazz.getDeclaredField(propertyName);
// 获取设置属性值的方法
Method setMethod = clazz.getDeclaredMethod(setMethodName, field.getType());
// 创建类的实例
Object obj = clazz.newInstance();
// 调用方法设置属性值
setMethod.invoke(obj,18);
// 输出对象
System.out.println(obj);

/*
// 根据类名获取Class对象
Class<?> clazz = Class.forName(className);
// 构造属性的setter方法名
String setMethodName = "set" + propertyName.toUpperCase().charAt(0) + propertyName.substring(1);
// 根据属性名获取属性类型
Method setMethod = clazz.getDeclaredMethod(setMethodName, int.class);
// 创建类的实例对象
Object obj = clazz.newInstance();
// 通过反射调用setter方法设置属性值
setMethod.invoke(obj,18);
// 输出对象信息
System.out.println(obj);
*/


/*
// 通过反射获取User类的Class对象
Class<?> clazz = Class.forName("cn.tedu.reflect.User");

// 获取User类中名为setAge且参数类型为int的方法对象
Method doSomeMethod = clazz.getDeclaredMethod("setAge", int.class);

// 创建User类的一个实例对象
Object obj = clazz.newInstance();

// 调用User对象的setAge方法，并将18作为参数传递进去
doSomeMethod.invoke(obj, 18);

// 输出User对象的信息，此时的输出将包括通过反射设置的年龄信息
System.out.println(obj);
*/



    }
}
